package com.lcy.algorithm.huawei;

import java.util.*;
import java.util.stream.Collector;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/**
 * 题目描述
 * 为了达到新冠疫情精准防控的需要，为了避免全员核酸检测带来的浪费，需要精准圈定可能被感染的人群。
 *
 * 现在根据传染病流调以及大数据分析，得到了每个人之间在时间、空间上是否存在轨迹交叉。
 *
 * 现在给定一组确诊人员编号（X1,X2,X3,...,Xn），在所有人当中，找出哪些人需要进行核酸检测，输出需要进行核酸检测的人数。（注意：确诊病例自身不需要再做核酸检测）
 *
 * 需要进行核酸检测的人，是病毒传播链条上的所有人员，即有可能通过确诊病例所能传播到的所有人。
 *
 * 例如：A是确诊病例，A和B有接触、B和C有接触、C和D有接触、D和E有接触，那么B\C\D\E都是需要进行核酸检测的人。
 *
 * 输入描述
 * 第一行为总人数 N
 *
 * 第二行为确认病例人员编号（确诊病例人员数量 < N），用逗号分割
 *
 * 第三行开始，为一个 N * N 的矩阵，表示每个人员之间是否有接触，0表示没有接触，1表示有接触。
 *
 * 输出描述
 * 整数：需要做核酸检测的人数
 *
 * 备注
 * 人员编号从0开始
 * 0 < N < 100
 * 用例
 * 输入
 * 5
 * 1,2
 * 1,1,0,1,0
 * 1,1,0,0,0
 * 0,0,1,0,1
 * 1,0,0,1,0
 * 0,0,1,0,1
 * 输出	3
 * 说明
 * 编号为1、2号的人员，为确诊病例。
 *
 * 1号和0号有接触，0号和3号有接触。
 *
 * 2号和4号有接触。
 *
 * 所以，需要做核酸检测的人是0号、3号、4号，总计3人需要进行核酸检测。
 *
 *
 *
 * 思路：把每一组和
 */
public class 精准核算检测 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = Integer.parseInt(sc.nextLine());
        Set<String> confirmedSet = Arrays.stream(sc.nextLine().split(",")).collect(Collectors.toSet());

        List<Set<String>> peoples = new ArrayList<>(n);
        for (int i = 0; i < n; i++) {
            Set<String> peopleSet = Arrays.stream(sc.nextLine().split(",")).collect(Collectors.toSet());
            peoples.add(peopleSet);
        }
        getResult(confirmedSet, peoples);
    }

    public static void getResult(Set<String> confirmedSet, List<Set<String>> peoples) {
       for(Set<String> people : peoples){
           // 求两个Set的交集
           Set<String> intersection = new HashSet<>(confirmedSet);
           intersection.retainAll(people); // 求交集
           if(intersection.size() > 0){
               confirmedSet.addAll(people);
           }
       }
        System.out.println(confirmedSet.size());
    }
}


